// 引入跳转页面
import { navigateTo, requestGetUserMsg } from "../../request/index.js"
// pages/shoppingCart/shoppingCart.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cars: [],
    allChecked: false,
    totalNum: 0,//总数量
    totalPrice: 0,//总价格
    userInfo: null
  },
  onLoad: function () {
      //0.如果用户合法,获取购物车信息
      this.getcars();

    // //1.判断用户是否合法
    // var b = this.checkLogin();
    // //只有合法才会请求服务器获取信息
    // if (b) {
    //   //2.第一次加载时获取购物车信息
    //   //2.1 获取用户信息
    //   var userInfo = wx.getStorageSync("userInfo");
    //   let {data}  = requestGetUserMsg("/getCars?phoneNum=" + userInfo.phoneNum);
    //   console.log(data);
    // }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
   

    // 1.获取缓存中的购物车信息
    let cars = wx.getStorageSync('cars') || [];
    // console.log(cars)
    //2. 获取缓存的地址,没有的话页面会提示获取用户地址的  (已废弃)
    // var address = wx.getStorageSync("address") || [];
    //3.设置地址到data中(已废弃)
    // this.setData({
    //   address: address
    // });
    // 4.计算商品  数量/价格/选中状态
    this.setCars(cars);

  },

  // 已废弃---------------------------------------
  chooseAddress: function () {
    // 选择收货地址
    // 1.获取authSetting中的 scope.address 的属性， 如果为true或者undefined才能获取用户地址
    wx.getSetting({
      success(res) {
        //2. 获取地址服务的状态
        let status = res.authSetting["scope.address"];
        // console.log(status);
        if (status == true || status === undefined) {
          // 3.可以直接湖区用户地址
          wx.chooseAddress({
            success(res1) {
              wx.setStorageSync("address", res1); //把地址信息存储到缓存中
            }
          });
        } else {
          // 4.不能获取地址， 指示用户开启地址服务
          wx.openSetting({
            // 打开服务成功
            success(res2) {
              wx.chooseAddress({
                //获取地址成功
                success(res3) {
                  wx.setStorageSync("address", res3); //把地址信息存储到缓存中
                }
              })
            }
          })
        }
      }
    })
  },
  setCars(cars) {
    // 总览: 重新计算商品  数量/价格/选中状态
    // every是一个数组方法  会遍历/接收一个回调函数  每一个函数都返回true  every方法才会返回true
    //如果every为空数组的话， 返回值是true
    // const allChecked = cars.length?cars.every(v=>v.checked):false;
    // 4.计算总价格和总数量
    let totalNum = 0;
    let totalPrice = 0;
    let allChecked = true;
    //1.购物车不为空执行下面操作， 为空则使用默认值
    if (cars.length > 0) {
      // 2.遍历数据计算商品总数量和价格
      cars.forEach(e => {
        if (e.checked) {
          totalNum += e.num;
          totalPrice += e.food_price * e.num;
        } else {
          allChecked = false;
        }
      });
    }
    //3.选中状态   购物车不为空的话选择刚才设置的allChecked值， 为空是false
    allChecked = cars.length > 0 ? allChecked : false;

    // console.log("总价格" + totalPrice + "总数量" + totalNum);
    // 4.设置属性
    this.setData({
      cars: cars,
      allChecked: allChecked,
      totalNum: totalNum,
      totalPrice: totalPrice
    })
    wx.setStorageSync('cars', cars);
  },
  reverseChecked() {
    // 1.获取全选的状态 取反  
    let allChecked = !this.data.allChecked;
    // 2.获取cars对象 设置所有的选中状态为  allChecked状态
    let cars = this.data.cars;
    if (cars.length > 0) {
      cars.forEach(v => v.checked = allChecked);
      //3.调用setCars  设置选中状态/商品数量/总价格
      this.setCars(cars);
    }
  },
  add(e) {
    // 增加商品数量
    // 1.获取该商品的商品id 
    const { food_id } = e.currentTarget.dataset
    //2.在cars中根据商品id找到对应商品的index
    let { cars } = this.data;
    let index = cars.findIndex(v => v.food_id == food_id);
    //3.修改商品的num属性
    cars[index].num += 1;
    console.log(cars);
    //4.调用setCars设置商品总价/数量/选中状态
    this.setCars(cars);
  },
  reduce(e) {
    // 减少商品数量
    // 1.获取该商品的商品id 
    const { food_id } = e.currentTarget.dataset
    //2.在cars中根据商品id找到对应商品的index
    let { cars } = this.data;
    let index = cars.findIndex(v => v.food_id == food_id);
    //3.修改商品的num属性
    if (cars[index].num > 1) {
      cars[index].num -= 1;
    } else {
      // 3.1如果商品数量为1  提示用户是否删除
      wx.showModal({
        title: '警告',
        content: '是否删除该订单？',
        success: (res) => {
          if (res.confirm) {
            // 3.1.1点击确定后获取该商品
            cars.splice(index, 1);//参数1：删除的索引  参数2：删除的个数
            this.setCars(cars);
            return;
          } else if (res.cancel) {
            // 3.2.1点击取消删除后直接返回
            return;
          }
        }
      })
    }
    // console.log(cars);
    //4.调用setCars设置商品总价/数量/选中状态
    this.setCars(cars);
  },
  payChecked() {
    // 总览：结算总价格
    //1.判断是否有商品选中
    if (this.data.totalNum === 0) {
      wx.showToast({
        title: "请选择商品",
        image: "../../icon/jinggao.png"
      });
      return;
    }
    // console.log(this.data.address)
    //2.判断收货地址是否为空
    // if (this.data.address.length < 1) {
    //   wx.showToast({
    //     title: "需要获取您的位置权限",
    //     image: "../../icon/jinggao.png"
    //   });
    //   return;
    // }
    // 4.跳转到订单页面
    wx.navigateTo({ url: '../pay/pay' });
    //5.支付成功后跳转到

  },
  handleItemChange: function (e) {
    //总览：单个商品的选中状态
    // 1.拿到被修改商品的对象
    //2.获取商品id
    const { food_id } = e.currentTarget.dataset
    //获取购物车数据
    let { cars } = this.data;
    //3.根据商品id获取 对应购物车数据的 索引
    let index = cars.findIndex(v => v.food_id == food_id);
    //4.商品选中状态取反
    cars[index].checked = !(cars[index].checked);

    //5.重新计算商品  数量/价格/选中状态
    this.setCars(cars);
  },
  //跳转到首页
  changeToIndex() {
    wx.switchTab({
      url: '../index/index'
    });
  },
async  getcars() {
    var b = this.checkLogin();
    if (b) {
      //为true表明用户合法, 可以查询
      //0.获取购物车信息
      var userInfo = wx.getStorageSync("userInfo");
      let { data } = await requestGetUserMsg({ url: "/getCars", data: { phoneNum: userInfo.phoneNum } });
      this.setData({ cars: data });
      // console.log(this.data.cars);
      wx.setStorageSync("cars", data);
    }
  },
  checkLogin() {
    //0.判断用户是否合法, 合法返回true  否则返回false
    let userInfo = wx.getStorageSync("userInfo") || [];
    if (userInfo.phoneNum == undefined) {
      return false;
    } else {
      return true;
    }
  }

})